package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import br.com.kapa.dao.DaoMateriaPrimaBeanRemote;
import br.com.kapa.dao.DaoUnidadeBeanRemote;
import br.com.kapa.model.MateriaPrima;
import br.com.kapa.model.Unidade;
import fachada.Fachada;

@ManagedBean(name="materiaBean")
@SessionScoped
public class MateriaPrimaBean {

	private MateriaPrima materia;
	private DataModel<MateriaPrima> materias;
	Fachada fachada = Fachada.getInstance(); 
	private DaoMateriaPrimaBeanRemote dao = fachada.getDaoMateriaPrima();
	private int unidadeSelecionada;
	private List<SelectItem> listaUnidades;
	
	public MateriaPrima getMateria() {return materia;}
	public void setMateria(MateriaPrima m) {materia = m;}
	public int getUnidadeSelecionada() {return unidadeSelecionada; }
	public void setUnidadeSelecionada(int u) {unidadeSelecionada=u;}
	
	
	public List<SelectItem> getListaUnidades() {
		listaUnidades = getLista();
		return listaUnidades;
	}
	public void setListaUnidades(List<SelectItem> listaUnidades) {
		this.listaUnidades = listaUnidades;
	}
	
	
	 public List<SelectItem> getLista() {
	        ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
	        DaoUnidadeBeanRemote unidadeDao = fachada.getDaoUnidade(); 
	        List<Unidade> resultado = unidadeDao.findAll();
	 
	        for (Unidade teste : resultado) {
	            SelectItem item = new SelectItem(teste.getId(), teste.getNome());
	            lista.add(item);
	        }
	        return lista;
	  }	
	
	public DataModel<MateriaPrima> getMaterias() {
		List<MateriaPrima> lista = dao.findAll();
		materias = new ListDataModel<MateriaPrima>(lista);
		return materias;
	}
	
	public void salvar() {
		Unidade u = fachada.getDaoUnidade().find(getUnidadeSelecionada());
		materia.setUnidade(u);
		FacesContext fc = FacesContext.getCurrentInstance();
		dao.persist(materia);
		fc.addMessage(null, new FacesMessage("Cadastro efetuado com sucesso", materia.getDescricao()));
		
		fachada.sendMessageToLog("Salvando MP",materia.getDescricao()); 
	}
	
	public void load(ActionEvent e){
		materia = (MateriaPrima)(materias.getRowData());
		if (materia.getUnidade() != null)
			setUnidadeSelecionada(materia.getUnidade().getId());
	}
	
	public void create(ActionEvent e) {
		materia = new MateriaPrima();
	}
	public void update(ActionEvent e) {
		Unidade u = fachada.getDaoUnidade().find(getUnidadeSelecionada());
		materia.setUnidade(u);
		FacesContext fc = FacesContext.getCurrentInstance();
		dao.merge(materia);
		fc.addMessage(null, new FacesMessage("Cadastro alterado com sucesso", materia.getDescricao())); 
	}
	
}
